#ifndef HTTP_SERVER_H
#define HTTP_SERVER_H

#include <string>
#include <memory>
#include <thread>
#include <atomic>
#include <unordered_map>
#include <functional>
#include "request.h"
#include "response.h"
#include "../asset/manager.h"

// HTTP服务器类，处理所有网络请求和响应
class HttpServer {
private:
    int port;                          // 服务器端口
    int serverSocket;                  // 服务器套接字
    std::atomic<bool> running;         // 服务器运行状态
    std::unique_ptr<std::thread> mainThread;  // 主服务器线程
    AssetManager* assetManager;        // 资产管理器指针

    // 路由映射：HTTP方法 + 路径 -> 处理函数
    std::unordered_map<std::string, std::function<void(const Request&, Response&)>> routes;

    // 初始化服务器套接字
    void initSocket();
    
    // 服务器主循环
    void run();
    
    // 处理客户端连接
    void handleClient(int clientSocket);
    
    // 解析HTTP请求
    Request parseRequest(const std::string& data);
    
    // 注册所有路由处理函数
    void registerRoutes();

    // 路由处理函数
    void handleGetAssets(const Request& req, Response& res);
    void handleGetAssetById(const Request& req, Response& res);
    void handlePostAsset(const Request& req, Response& res);
    void handlePutAsset(const Request& req, Response& res);
    void handleDeleteAsset(const Request& req, Response& res);
    void handleNotFound(const Request& req, Response& res);

public:
    // 构造函数
    HttpServer(int port, AssetManager* manager);
    
    // 析构函数
    ~HttpServer();
    
    // 启动服务器
    void start();
    
    // 停止服务器
    void stop();
};

#endif // HTTP_SERVER_H
